// 链表的基本机构
function ListNode(val) {
    this.name = val;
    this.next = null;  // 一般是下一个的指针 最后一个为null
}

var a = new ListNode(1);
var b = new ListNode(2);
var c = new ListNode(3);
a.next = b;
b.next = c;

let head = a;
while (head) {
    console.log("转换前",head.name);
    head = head.next
}

function reverseList(head) {
    // 单节点或非链表
    if (!head || !head.next) return head;

    var next = head.next;

    var revertHead = reverseList(head.next)

    next.next = head;
    head.next = null;
    return revertHead
}
// 利用递归

//         next  next           next1        next2
//  head   next  next（head1）  next(head2)  end（并不会递归到这个位置，revertHead 就是end）
head = reverseList(a);

while (head) {
    console.log("转换后",head.name);
    head = head.next
}

// 非递归
// var reverseList = function (head) {
//     let pre = null
//     while (head) {
//         next = head.next
//         head.next = pre
//         pre = head
//         head = next
//     }
//     return pre
// };

// 作者：Tonychen
// 链接：https://juejin.cn/post/6844903550204510222
// 来源：掘金
// 著作权归作者所有。商业转载请联系作者获得授权，非商业转载请注明出处。